package main

import (
	"fmt"
	"image"
	_ "image/color"
	_ "image/png"
	"math"
	"os"
)

type Circle struct {
	X, Y, R float64
}

func main() {
	//生成图片
	//	img := image.NewRGBA(image.Rect(0, 0, 100, 50))
	//	img.Set(10, 30, color.RGBA{255, 0, 0, 255})
	//	f, _ := os.OpenFile("out.png", os.O_WRONLY|os.O_CREATE, 0600)
	//	defer f.Close()
	//	png.Encode(f, img)

	//生成复杂色彩的图片
	//	var w, h int = 280, 240
	//	var hw, hh float64 = float64(w / 2), float64(h / 2)
	//	r := 40.0
	//	θ := 2 * math.Pi / 3
	//	cr := &Circle{hw - r*math.Sin(0), hh - r*math.Cos(0), 60}
	//	cg := &Circle{hw - r*math.Sin(θ), hh - r*math.Cos(θ), 60}
	//	cb := &Circle{hw - r*math.Sin(-θ), hh - r*math.Cos(-θ), 60}
	//	m := image.NewRGBA(image.Rect(0, 0, w, h))
	//	for x := 0; x < w; x++ {
	//		for y := 0; y < h; y++ {
	//			c := color.RGBA{
	//				cr.Brightness(float64(x), float64(y)),
	//				cg.Brightness(float64(x), float64(y)),
	//				cb.Brightness(float64(x), float64(y)),
	//				255,
	//			}
	//			m.Set(x, y, c)
	//		}
	//	}
	//	f, err := os.OpenFile("rbg.png", os.O_WRONLY|os.O_CREATE, 0600)
	//	if err != nil {
	//		fmt.Println(err)
	//		return
	//	}
	//	defer f.Close()
	//	png.Encode(f, m)

	//获取一张图片的尺寸
	width, height := getImageDimension("rbg.png")
	fmt.Println("Width:", width, "Height:", height)

}

func getImageDimension(imagePtah string) (int, int) {
	file, err := os.Open(imagePtah)
	defer file.Close()
	if err != nil {
		fmt.Fprintf(os.Stderr, "%v\n", err)
	}
	image, _, err := image.DecodeConfig(file)
	if err != nil {
		fmt.Fprintf(os.Stderr, "%s:%v\n", imagePtah, err)
	}
	return image.Width, image.Height
}

func (c *Circle) Brightness(x, y float64) uint8 {
	var dx, dy float64 = c.X - x, c.Y - y
	d := math.Sqrt(dx*dx+dy*dy) / c.R
	if d > 1 {
		return 0
	} else {
		return 255
	}
}
